import java.util.*;

public class Solution1202 {
    public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {
        int[] b=new int[s.length()];
        for (int i=0;i<s.length();i++){
            b[i]=i;
        }
        for (List<Integer> pair : pairs) {
            int x=find(b,pair.get(0));
            int y=find(b,pair.get(1));
            b[x]=y;
        }
        Map<Integer, Set<Integer>> map=new HashMap<>();
        for (int i=0;i<b.length;i++){
            Set<Integer> set=map.getOrDefault(find(b,i),new HashSet<>());
            set.add(i);
            map.put(find(b,i),set);
        }
        char[] chars=new char[s.length()];
        for (Map.Entry<Integer, Set<Integer>> integerSetEntry : map.entrySet()) {
            List<Character> list=new ArrayList<>();
            for (Integer integer : integerSetEntry.getValue()) {
                list.add(s.charAt(integer));
            }
            list.sort(Comparator.comparingInt(a -> a));
            List<Integer> target=new ArrayList<>(integerSetEntry.getValue());
            target.sort(Comparator.comparingInt(a->a));
            for (int i=0;i<list.size();i++){
                chars[target.get(i)]=list.get(i);
            }
        }
        return String.valueOf(chars);
    }

    int find(int[] b,int t){
        List<Integer> p=new ArrayList<>();
        while (b[t]!=t){
            p.add(t);
            t=b[t];
        }
        for (Integer integer : p) {
            b[integer]=t;
        }
        return t;
    }

    public static void main(String[] args) {
        List<List<Integer>> lists=new ArrayList<>();
        List<Integer>l1=new ArrayList<>();
        l1.add(0);l1.add(3);
        List<Integer> l2=new ArrayList<>();
        l2.add(1);l2.add(2);
        lists.add(l1);lists.add(l2);
        System.out.println(new Solution1202().smallestStringWithSwaps("dcab",lists));
    }
}
